/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.apolo.repositorio;

/**
 *
 * @author eugenio
 */
import java.util.LinkedList;
import java.util.List;
import com.apolo.entidades.Tarefa;

/**
 * @author eugenio
 *
 */
public class RepositorioTarefa {

	private List<Tarefa> listaTarefas;

	private int geraCodigo = 0; // para gerar codigos das pessoas cadastradas

	/**
	 * Ao instanciar um RepositorioPessoaLista o mesmo ja cria uma Lista ligada do Tipo Pessoa
	 * @see Tarefa
	 */
	public RepositorioTarefa() {
		this.listaTarefas = new LinkedList<Tarefa>();
	}

	/**
	 * Faz a busca de uma dada Pessoa e retorna o indice da Lista de Pessoas
	 * @param codigo Codigo da Pessoa pesquisada
	 * @return indice da Pessoa pesquisada na Lista
	 */
	private int procurarIndice(int codigo) {
		int indice = 0;
		while (indice < listaTarefas.size()) {
			Tarefa p = listaTarefas.get(indice);
			if (p.getCodigo() == codigo)
				return indice;
			indice++;
		}
		return -1;
	}

	/**
	 * Insere uma Pessoa na Lista de Pessoas
	 * @param p Pessoa
	 * @return Codigo da Pessoa
	 */
	public int insere(Tarefa p){
		p.setCodigo(geraCodigo++);
		listaTarefas.add(p);
		return p.getCodigo();
	}

	/**
	 * Dado o Codigo da Pessoa, faz a busca dessa Pessoa na Lista de Pessoas
	 * @param codigo Codigo da Pessoa
	 * @return Pessoa Pessoa encontrada na Lista de Pessoas
	 */
	public Tarefa procura(int codigo){
		int indice = this.procurarIndice(codigo);
		if (indice >= 0){
                    return this.listaTarefas.get(indice);
                }else {
                    return null;
                }			
	}

	/**
	 * Checa se a Pessoa esta na Lista de Pessoa
	 * @param codigo Codigo da Pessoa
	 * @return True se a Pessoa foi encontra e False se a Pessoa nao foi encontrada
	 */
	public boolean existe(int codigo) {
		int indice = this.procurarIndice(codigo);
		if (indice >= 0)
			return true;
		else
			return false;

	}

	/**
	 * Dada uma Pessoa com os novos atributos faz a atualizacao da Pessoa
	 * @param p Pessoa
	 */
	public void atualiza(Tarefa p){
		int indice = this.procurarIndice(p.getCodigo());
		if (indice >= 0){
			this.listaTarefas.set(indice, p);
                }
	}

	/**
	 * Dado o Codigo da Pessoa, remove esta Pessoa da Lista de Pessoas
	 * @param codigo Codigo da Pessoa
	 */
	public void deleta(int codigo){
            //to do
	}

	/**
	 * @return A quantidade de Pessoas na Lista de Pessoas
	 */
	public int size() {
		return this.listaTarefas.size();
	}

	/** 
	 * Dada uma posicao na Lista de Pessoas, retorna a Pessoa da posicao corrente
	 * @param posicao Posicao na Lista de Pessoas
	 * @return Pessoa
	 */
	public Tarefa pegaElementoDaLista(int posicao) {
		if (posicao < listaTarefas.size())
			return listaTarefas.get(posicao);
		else
			return null;
	}
	
	/**
	 * 
	 * @return Lista de Pessoas
	 */
	public List<Tarefa> getListaTarefa(){
		return this.listaTarefas;
	}
}